#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
const int N=2e6+100;

LL d[N],p[N],q[N],w[N];
int main()
{
// 	freopen("ice.in","r",stdin);
// 	freopen("ice.out","w",stdout);
	int n,m,v,i;
    cin>>n>>m>>v;
	LL ans=0,dt=0,s,dn=0;
	for (i=1;i<=n;i++) {
		cin>>d[i];
	}
	for (i=1;i<=n;i++) {
		cin>>p[i];
	}
	
	int l=1,r=0;
    for (i = 1; i <= n; i++) {
        // 1. 维护队列单调性：移除价格更高的元素
        while (l <= r && p[i] - dt <= p[q[r]]) r--;
        
        s = d[i];  // 当前需求量
        
        // 2. 使用队列中更便宜的冰棍
        while (l <= r)
            if (s < w[q[l]] - dn) {
                // 当前需求小于队首能提供的数量
                ans += (p[q[l]] + dt) * s;  // 使用s支
                dn += s;  // 累计使用量增加
                s = 0;
                break;
            } else {
                // 当前需求大于等于队首能提供的数量
                ans += (p[q[l]] + dt) * (w[q[l]] - dn);
                s -= w[q[l]] - dn;
                dn = w[q[l++]];  // 队首元素完全使用，出队
            }
        
        // 3. 剩余需求用当前天的价格满足
        ans += 1LL * s * p[i];
        
        // 4. 将当前天加入队列
        q[++r] = i;
        w[i] = v + dn;    // 当前天最多能提供v支（考虑容量）
        p[i] -= dt;       // 调整价格（减去时间偏移）
        dt += m;          // 时间偏移增加（存储成本）
    }
	printf("%lld\n",ans);
	return 0;
}
